// utils 这个文件是一个全局的工具包文件, 一些全局用到的数据,函数在这里定义

// 验证邮箱的规则
var checkEmail = (rule, value, callback) => {
    const regEmail = /^\w+@\w+(\.\w+)+$/ // 验证邮箱的正则表达式
    if (regEmail.test(value)) {
        return callback() // 合法邮箱
    }
    // 返回一个错误提示
    callback(new Error('请输入合法的邮箱'))
}
// 验证手机的规则
var checkMobeli = (rule, value, callback) => {
    const regMobile = /^1[34578]\d{9}$/
    if (regMobile.test(value)) {
        return callback()
    }
    // 返回一个错误提示
    callback(new Error('请输入合法的手机号码'))
}
// 验证输入的是不是数字
var checkNumber = (rule, value, callback) => {
    if (value*1 == value) {
        return callback()
    }
    callback(new Error('请输入数字值'))// 返回一个错误提示
}
// 获取表单验证规则(自定义hook)
function useRules() {
    return {
        // 用户名验证
        nameRule: [
            {
                required: true,           // 必选项
                message: '请输入账号',   // 验证失败提示      
                trigger: 'blur'           // 失去焦点时验证
            }, {
                min: 2,     // 最少2个字符
                max: 10,     // 最多10个字符
                message: '账号长度在2-10之间',
                trigger: 'blur'
            }
        ],
        // 密码验证
        pasRule: [
            {
                required: true,
                message: '请输入密码',
                trigger: 'blur'
            }, {
                min: 4,     // 最少4个字符
                max: 12,     // 最多12个字符
                message: '密码长度在4-12之间',
                trigger: 'blur'
            }
        ],
        // 邮箱验证
        emailRule: [
            {
                required: true,
                message: '请输入邮箱',
                trigger: 'blur'
            }, {
                validator: checkEmail, //自定义验证函数
                trigger: 'blur'
            }
        ],
        // 手机号验证
        mobileRule: [
            {
                required: true,
                message: '请输入手机',
                trigger: 'blur'
            }, {
                validator: checkMobeli, //自定义验证函数
                trigger: 'blur'
            }
        ],
        // 角色名验证
        roleNameRule: [
            {
                required: true,
                message: '请输入角色名字',
                trigger: 'blur'
            },
            {
                min: 2,
                max: 10,
                message: '输入的范围是 2 ~ 10 个字符',
                triggetr: 'blur'
            }
        ],
        // 角色描述验证
        roleDescRule: [
            {
                min: 0,
                max: 20,
                message: '最多输入20位字符',
                triggetr: 'blur'
            }
        ],
        // 商品名验证
        goodsNameRule: [
            {
                required: true,           // 必选项
                message: '请输入商品名',   // 验证失败提示      
                trigger: 'blur'           // 失去焦点时验证
            }, {
                min: 2,     // 最少2个字符
                max: 60,     // 最多10个字符
                message: '商品名长度在2-10之间',
                trigger: 'blur'
            }
        ],
        // 商品价格验证
        goodsPriceRule: [
            {
                required: true,          
                message: '请输入商品价格',     
                trigger: 'blur'        
            }, {
                validator: checkNumber,
                trigger: 'blur'
            }
        ],
        // 商品数量验证
        goodsNumberRule: [
            {
                required: true,          
                message: '请输入商品数量',     
                trigger: 'blur'        
            }, {
                validator: checkNumber,
                trigger: 'blur'
            }
        ],
        // 商品重量验证
        goodsWeightRule: [
            {
                required: true,          
                message: '请输入商品重量',     
                trigger: 'blur'        
            }, {
                validator: checkNumber,
                trigger: 'blur'
            }
        ],
        // 商品分类验证
        goodsCateRule: [
            {
                required: true,          
                message: '请选择商品分类',     
                trigger: 'blur'        
            }
        ],
        // 分类属性或参数名验证
        attrNameRule: [
            {
                required: true,           // 必选项
                message: '请输入正确的名称',   // 验证失败提示      
                trigger: 'blur'           // 失去焦点时验证
            }, {
                min: 2,     // 最少2个字符
                max: 10,     // 最多10个字符
                message: '名称长度在2-10之间',
                trigger: 'blur'
            }
        ],
    }
}

// 时间格式化函数,参数1是date对象或字符串, 参数2是时间格式  如 'yyyy-mm-dd'
function timeFilter(date, format) {
    // 把总毫秒数转化成时间对象
    if (typeof date == "number") {
        date = new Date()
    }
    //获取时间信息, 键是格式正则
    let obj = {
        "y+": date.getFullYear(),
        "M+": date.getMonth() + 1,
        "d+": date.getDate(),
        "h+": date.getHours(),
        "m+": date.getMinutes(),
        "s+": date.getSeconds()
    }
    // 把时间格式字符串中的格式替换为时间信息 
    for (const key in obj) {
        if (new RegExp(`${key}`).test(format)) {
            // 读取时间信息,并保留两位小数
            var str = obj[key] < 10 ? "0"+obj[key] : ""+obj[key];
            // 把格式化字符中的格式字符替换成真正的时间信息
            format = format.replace(
                new RegExp(`${key}`),
                str
            );
        }
    }
    return format
}


// 导出所有数据
export {
    useRules,
    timeFilter
}   